package com.one.group.service;

import com.mybatisflex.core.service.IService;
import com.one.group.model.dto.ParkingSpaceAddDto;
import com.one.group.model.dto.ParkingSpaceBindDto;
import com.one.group.model.dto.ParkingSpaceChargeBatchBindDto;
import com.one.group.model.dto.ParkingSpaceChargeBindDto;
import com.one.group.model.dto.ParkingSpaceChargeUnbindDto;
import com.one.group.model.dto.ParkingSpaceQueryDto;
import com.one.group.model.dto.ParkingSpaceUnbindDto;
import com.one.group.model.entity.ParkingSpace;
import com.one.group.model.vo.ParkingSpaceDetailVo;
import com.one.group.model.vo.ParkingSpaceListVo;
import com.one.group.model.vo.ParkingSpaceSearchVo;

import java.util.List;

public interface ParkingSpaceService extends IService<ParkingSpace> {

    /**
     * 车位列表查询
     * @param parkingSpaceQueryDto 查询条件
     * @return 车位列表
     */
    List<ParkingSpaceListVo> findParkingSpaceByQueryDto(ParkingSpaceQueryDto parkingSpaceQueryDto);

    /**
     * 添加车位
     * @param parkingSpaceAddDto 车位添加信息
     * @return 添加结果
     */
    boolean addParkingSpace(ParkingSpaceAddDto parkingSpaceAddDto);

    /**
     * 删除车位
     * @param id 车位ID
     * @return 删除结果
     */
    boolean deleteParkingSpace(Long id);

    /**
     * 批量删除车位
     * @param ids 车位ID列表
     * @return 删除结果
     */
    boolean batchDeleteParkingSpaces(List<Long> ids);

    /**
     * 绑定车辆到车位
     * @param bindDto 绑定信息
     * @return 绑定结果
     */
    boolean bindVehicle(ParkingSpaceBindDto bindDto);

    /**
     * 解绑车辆与车位
     * @param unbindDto 解绑信息
     * @return 解绑结果
     */
    boolean unbindVehicle(ParkingSpaceUnbindDto unbindDto);

    /**
     * 查询车位详情
     * @param id 车位ID
     * @return 车位详情
     */
    ParkingSpaceDetailVo getParkingSpaceDetail(Long id);

    /**
     * 绑定收费标准到车位
     * @param bindDto 绑定信息
     * @return 绑定结果
     */
    boolean bindChargeStandard(ParkingSpaceChargeBindDto bindDto);

    /**
     * 批量绑定收费标准到车位
     * @param batchBindDto 批量绑定信息
     * @return 绑定结果
     */
    boolean batchBindChargeStandard(ParkingSpaceChargeBatchBindDto batchBindDto);

    /**
     * 解除车位与收费标准的绑定
     * @param unbindDto 解除绑定信息
     * @return 解除绑定结果
     */
    boolean unbindChargeStandard(ParkingSpaceChargeUnbindDto unbindDto);

    /**
     * 根据车位编号模糊搜索车位
     * @param spaceNo 车位编号（支持模糊搜索）
     * @param cellId 小区ID
     * @return 车位搜索结果列表
     */
    List<ParkingSpaceSearchVo> searchParkingSpacesBySpaceNo(String spaceNo, Long cellId);

    /**
     * 绑定业主到车位
     * @param parkingSpaceId 车位ID
     * @param ownerId 业主ID
     * @return 绑定结果
     */
    boolean bindOwner(Long parkingSpaceId, Long ownerId);

    /**
     * 解绑业主与车位
     * @param parkingSpaceId 车位ID
     * @return 解绑结果
     */
    boolean unbindOwner(Long parkingSpaceId);
}
